#！/bin/bash

## 启用备份脚本
## 1. 将脚本上传至服务器，如上传后的路径为/usr/local/backup/eva-cms/sql-backup.sh
## 2. 执行crontab -e，打开系统cron定时编辑器
## 3. 写入“25 3 * * * /usr/local/backup/eva-cms/sql-backup.sh >> /usr/local/backup/eva-cms/output.log 2>&1"并保存
## 这样表示每日3:25分执行数据库备份，并会将备份日志信息保存在/usr/local/backup/eva-cms/output.log中
##
## 常用cron表达式
## - 每天0点执行备份：0 0 * * *
## - 每周六0点执行备份：0 0 * * 6
## - 每周日0点执行备份：0 0 * * 0
## - 每10天执行备份：0 0 */10 * *
## - 每月1号0点执行备份：0 0 1 * *

# 备份的路径
BACKUP=/usr/local/backup/eva-cms/sql
# 当前的时间作为文件名
DATETIME=$(date +%Y_%m_%d_%H%M%S)
echo "========== 开始数据库备份 ==========="
echo "备份路径为 $BACKUP/$DATETIME.tar.gz"

# 主机
HOST=localhost
# 用户名
DB_USER=root
# 密码
DB_USER=local@123
# 备份数据库名
DATABASE=eva-cms
# 备份保留最多天数
KEEP_DAYS=90

# 创建备份路径
# 如果备份路径文件夹存在就使用，否则创建
[ ! -d "$BACKUP/$DATETIME"  ] && mkdir -p "$BACKUP/$DATETIME"
# 执行mysql的备份数据库的指令
mysqldump -u${DB_USER} -p${DB_PWD} --host=$HOST $DATABASE > $BACKUP/$DATETIME/$DATETIME.sql
# 打包备份文件
cd $BACKUP
tar -zcvf $DATETIME.tar.gz $DATETIME
# 删除临时目录
rm -rf $BACKUP/$DATETIME

# 删除90天前的备份文件(-exec rm -rf {} \是固定写法，删除查询出来的数据)
find $BACKUP -mtime +$KEEP_DAYS -name "*.tar.gz" -exec rm -rf {} \;
echo "========== 数据库备份完成 ==========="
